package com.doubao.device.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doubao.device.dto.TagDTO;
import com.doubao.device.entity.SmartDevice;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 智能体Mapper
 */
@Mapper
public interface SmartDeviceMapper extends BaseMapper<SmartDevice> {

    /**
     * 增加收藏数量
     *
     * @param deviceId 智能体ID
     * @return 影响行数
     */
    @Update("UPDATE smart_device SET collection_count = collection_count + 1 WHERE id = #{deviceId}")
    int increaseCollectionCount(@Param("deviceId") Long deviceId);

    /**
     * 减少收藏数量
     *
     * @param deviceId 智能体ID
     * @return 影响行数
     */
    @Update("UPDATE smart_device SET collection_count = GREATEST(collection_count - 1, 0) WHERE id = #{deviceId}")
    int decreaseCollectionCount(@Param("deviceId") Long deviceId);

    /**
     * 增加使用次数
     *
     * @param deviceId 智能体ID
     * @return 影响行数
     */
    @Update("UPDATE smart_device SET usage_count = usage_count + 1 WHERE id = #{deviceId}")
    int increaseUsageCount(@Param("deviceId") Long deviceId);

    /**
     * 根据分类ID查询分类名称
     *
     * @param categoryId 分类ID
     * @return 分类名称
     */
    @Select("SELECT name FROM device_category WHERE id = #{categoryId} AND status = 1")
    String selectCategoryNameById(@Param("categoryId") Long categoryId);

    /**
     * 根据用户ID查询用户名
     *
     * @param userId 用户ID
     * @return 用户名
     */
    @Select("SELECT username FROM user WHERE id = #{userId}")
    String selectUserNameById(@Param("userId") Long userId);

    /**
     * 根据用户ID查询用户昵称
     *
     * @param userId 用户ID
     * @return 用户昵称
     */
    @Select("SELECT nickname FROM user WHERE id = #{userId}")
    String selectUserNicknameById(@Param("userId") Long userId);

    /**
     * 根据AI提供商ID查询提供商名称
     *
     * @param providerId 提供商ID
     * @return 提供商名称
     */
    @Select("SELECT name FROM ai_provider WHERE id = #{providerId}")
    String selectProviderNameById(@Param("providerId") Long providerId);

    /**
     * 根据AI模型ID查询模型名称
     *
     * @param modelId 模型ID
     * @return 模型名称
     */
    @Select("SELECT name FROM ai_model WHERE id = #{modelId}")
    String selectModelNameById(@Param("modelId") String modelId);

    /**
     * 查询智能体的标签
     *
     * @param deviceId 智能体ID
     * @return 标签列表
     */
    List<TagDTO> selectDeviceTagsByDeviceId(@Param("deviceId") Long deviceId);

    /**
     * 查询公共设备列表，包含创建者名称
     *
     * @param page 分页参数
     * @param sort 排序方式
     * @return 设备分页列表
     */
    IPage<SmartDevice> selectPublicDevices(Page<SmartDevice> page, @Param("sort") String sort);

    /**
     * 条件查询智能体，包含创建者名称
     *
     * @param page 分页参数
     * @param queryWrapper 查询条件
     * @return 智能体分页列表
     */
    IPage<SmartDevice> selectDevicesByCondition(Page<SmartDevice> page, @Param("queryWrapper") Object queryWrapper);

    /**
     * 根据分类ID查询公共设备列表，包含创建者名称
     *
     * @param page 分页参数
     * @param categoryId 分类ID
     * @return 设备分页列表
     */
    IPage<SmartDevice> selectPublicDevicesByCategory(Page<SmartDevice> page, @Param("categoryId") Long categoryId);


}